<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="generator" content="JsDoc Toolkit" />
		
		<title>JsDoc Reference - Function</title>

		<style type="text/css">
			/* default.css */
body
{
	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
	width: 800px;
}

.header
{
	clear: both;
	background-color: #ccc;
	padding: 8px;
}

h1
{
	font-size: 150%;
	font-weight: bold;
	padding: 0;
	margin: 1em 0 0 .3em;
}

hr
{
	border: none 0;
	border-top: 1px solid #7F8FB1;
	height: 1px;
}

pre.code
{
	display: block;
	padding: 8px;
	border: 1px dashed #ccc;
}

#index
{
	margin-top: 24px;
	float: left;
	width: 160px;
	position: absolute;
	left: 8px;
	background-color: #F3F3F3;
	padding: 8px;
}

#content
{
	margin-left: 190px;
	width: 600px;
}

.classList
{
	list-style-type: none;
	padding: 0;
	margin: 0 0 0 8px;
	font-family: arial, sans-serif;
	font-size: 1em;
	overflow: auto;
}

.classList li
{
	padding: 0;
	margin: 0 0 8px 0;
}

.summaryTable { width: 100%; }

h1.classTitle
{
	font-size:170%;
	line-height:130%;
}

h2 { font-size: 110%; }
caption, div.sectionTitle
{
	background-color: #7F8FB1;
	color: #fff;
	font-size:130%;
	text-align: left;
	padding: 2px 6px 2px 6px;
	border: 1px #7F8FB1 solid;
}

div.sectionTitle { margin-bottom: 8px; }
.summaryTable thead { display: none; }

.summaryTable td
{
	vertical-align: top;
	padding: 4px;
	border-bottom: 1px #7F8FB1 solid;
	border-right: 1px #7F8FB1 solid;
}

/*col#summaryAttributes {}*/
.summaryTable td.attributes
{
	border-left: 1px #7F8FB1 solid;
	width: 140px;
	text-align: right;
}

td.attributes, .fixedFont
{
	line-height: 15px;
	color: #002EBE;
	font-family: "Courier New",Courier,monospace;
	font-size: 13px;
}

.summaryTable td.nameDescription
{
	text-align: left;
	font-size: 13px;
	line-height: 15px;
}

.summaryTable td.nameDescription, .description
{
	line-height: 15px;
	padding: 4px;
	padding-left: 4px;
}

.summaryTable { margin-bottom: 8px; }

ul.inheritsList
{
	list-style: square;
	margin-left: 20px;
	padding-left: 0;
}

.detailList {
	margin-left: 20px; 
	line-height: 15px;
}
.detailList dt { margin-left: 20px; }

.detailList .heading
{
	font-weight: bold;
	padding-bottom: 6px;
	margin-left: 0;
}

.light, td.attributes, .light a:link, .light a:visited
{
	color: #777;
	font-style: italic;
}

.fineprint
{
	text-align: right;
	font-size: 10px;
}
		</style>
	</head>

	<body>
<!-- ============================== header ================================= -->	
		<!-- begin static/header.html -->
		<div id="header">
</div>
		<!-- end static/header.html -->

<!-- ============================== classes index ============================ -->
		<div id="index">
			<!-- begin publish.classesIndex -->
			<div align="center"><a href="../index.html">Class Index</a>
| <a href="../files.html">File Index</a></div>
<hr />
<h2>Classes</h2>
<ul class="classList">
	
	<li><i><a href="../symbols/_global_.html">_global_</a></i></li>
	
	<li><a href="../symbols/Function.html">Function</a></li>
	
</ul>
<hr />
			<!-- end publish.classesIndex -->
		</div>
		
		<div id="content">
<!-- ============================== class title ============================ -->
			<h1 class="classTitle">
				
				Built-In Namespace Function
			</h1>

<!-- ============================== class summary ========================== -->			
			<p class="description">
				
				
			
				
				
				
			</p>

<!-- ============================== constructor summary ==================== -->			
			

<!-- ============================== properties summary ===================== -->
			

<!-- ============================== methods summary ======================== -->
			
				
				
				<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class Function.">
					<caption>Method Summary</caption>
					<thead>
						<tr>
							<th scope="col">Method Attributes</th>
							<th scope="col">Method Name and Description</th>
						</tr>
					</thead>
					<tbody>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/Function.html#implements">implements</a></b>(iFaces)
								</div>
								<div class="description"><p>This method ensures that current class has defined instance methods as defined by an implementing interfaces otherwises throws an error.</div>
							</td>
						</tr>
					
						<tr>
							<td class="attributes">&nbsp;</td>
							<td class="nameDescription">
								<div class="fixedFont"><b><a href="../symbols/Function.html#inherits">inherits</a></b>(parentClass)
								</div>
								<div class="description"><p>This method redefines your class with capabilities from parentClass and extends/overrides it with your own class capabailities.</div>
							</td>
						</tr>
					
					</tbody>
				</table>
				
				
				
			
<!-- ============================== events summary ======================== -->
			

<!-- ============================== constructor details ==================== -->		
			

<!-- ============================== field details ========================== -->		
			

<!-- ============================== method details ========================= -->		
			
				<div class="sectionTitle">
					Method Detail
				</div>
				
					<a name="implements"> </a>
					<div class="fixedFont">
					
					
					<b>implements</b>(iFaces)
					
					</div>
					<div class="description">
						<p>This method ensures that current class has defined instance methods as defined by an implementing interfaces otherwises throws an error.<p>

<h3>Usage</h3>
<h4>1. Define an interface - as JSON object</h4>
 <pre>
	var IRenderable = {
		//no body please. leave it empty.
		<b>render: function(){};</b> 
	};
	</pre>
<h4>2. Define your class and say it implemets an interface</h4>
 <pre>
	var CuteButton = function(){
		....
		//implemented method as guided by an interface IRenderable 
		<b>this.render = function(){...here you define body...}</b>
		....
		
	}.<b>implements(IRenderable)</b>; 
	//will throw exception if render method is not defined 
	</pre>
<h4>3. You can implement multiple interfaces as </h4>
 <pre>
	var CuteButton = function(){
		...
	}.<b>implements(IRenderable,IClickable);</b>; 
 </pre> 
	<h4>OR like this</h4>
 <pre>
	var CuteButton = function(){
		...
	}.<b>implements(IRenderable).implements(IClickable);</b>; 
 </pre>
						
							<br />
							<i>Defined in: </i> <a href="../symbols/src/_Users_rpatil_Documents_oopsjs_oops.js.html">oops.js</a>.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>iFaces</b>
									
								</dt>
								<dd>comma separated list interfaces to be implemented</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>this - the same class</dd>
							
							</dl>
						
						
						

					<hr />
				
					<a name="inherits"> </a>
					<div class="fixedFont">
					
					
					<b>inherits</b>(parentClass)
					
					</div>
					<div class="description">
						<p>This method redefines your class with capabilities from parentClass and extends/overrides it with your own class capabailities. 
	The private vars and methods from parent class are also inherited. The inherited class can use <b>_super</b> variable to access parent's vars/methods 
<p>

<h3>Usage</h3>
<h4>1. Define your class </h4>
 <pre>
	var Employee = function(){

		//private variables	- actually protected - will be inherited
		var _name;
		var _employeeId;
		
		//private methods - actually protected - will be inherited
		var _setName(name){
			_name = name;
		} 

		//public methods
		//Constructor
		this.init = function(name,id){
			_name = name;
			_employeeId = id;
		};
		
		this.getName = function(){
			return _name;
		};
		
		this.getEmployeeId = function(){
			return _employeeId;
		};
	};
	</pre>
<h4>2. Derive the child class from above class</h4>
 <pre>
	var Manager = function(){
		
		//own private var	
		var _reportees = []; 

		//own private methods
		var _addReportee = function(employee){
			_reportees.push(employee);
		};
		
		//own public methods
		//Constructor
		this.init = function(name,id){
			_super.init(name,id);//_super points to parent
			_reportees = [];	
		};
		//Method overridding
		this.getName = function(){
			return _super._getName(); //calling super private method
		};
		
		this.getReportees = function(){
			return this._reportees;
		}
		
	}.<b>inherits(Employee)</b>; 
	...
	...
 <style>i{color:red}</style> 
	<b>var e = new Employee().init("rpatil","1");
	e.getName();
	e.getEmployeeId();
	e instanceof Employee;</b> //true 

	e.<b>_setName</b>("NewName");//<b><i>Not allowed - private method - ERROR</i></b>
	e.<b>_name</b>;//<b><i>Not allowd - private var - ERROR</i></b>

	<b>var m = new Manager().init("sumit","2");</b>

	m.getName(); //Overrided - will be called from manager
	m.getEmployeeId(); //Inherited - will be called from Employee
	m.getReportees();
	m instanceof Manager; //true
	<b>m instanceof Employee;</b> //false. This doesn't work :(

	m.<b>_reportees</b>;//<b><i>Not allowed - private var - ERROR</i></b>
	m.<b>_super</b>;//<b><i>Not allowed - _super? what is that? - ERROR</i></b>
	m._name;//Not allowed - private var inherited from parent - public access not allowd.
	...

	</pre>
<h4>3. You can inherit and implement at the same time </h4>
 <pre>
	var Manager = function(){
		...
	}.<b>inherits(Employee).implements(IAuthor);</b>; 
	//Manager is inheriting employee and implementing IAuthor
</pre>
<p>and this is how <b>IAuthor</b> may look like</p>
 <pre>
	var IAuthor = {
		writeBooks:function(){...}
	}
 </pre>
						
							<br />
							<i>Defined in: </i> <a href="../symbols/src/_Users_rpatil_Documents_oopsjs_oops.js.html">oops.js</a>.
						
						
					</div>
					
					
					
						
							<dl class="detailList">
							<dt class="heading">Parameters:</dt>
							
								<dt>
									<b>parentClass</b>
									
								</dt>
								<dd>name of the parent class from which this class will inherit properties.</dd>
							
							</dl>
						
						
						
						
						
							<dl class="detailList">
							<dt class="heading">Returns:</dt>
							
								<dd>newClass - the new redifined class with properties from parent class + child class</dd>
							
							</dl>
						
						
						

					
				
			
			
<!-- ============================== event details ========================= -->		
			
			
			<hr />
		</div>

		
<!-- ============================== footer ================================= -->
		<div class="fineprint" style="clear:both">
			
			Documentation generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> 2.4.0 on Sun Aug 29 2010 03:20:18 GMT+0530 (GMT+05:30)
		</div>
	</body>
</html>
